﻿<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>屏幕朝向-测试</title>
    <meta content="width=device-width,initial-scale=1,user-scalable=no" name="viewport">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">

    <!-- 引入代码块样式 -->
    <link rel="stylesheet" href="https://gitee.com/actor20170211030627/HtmlTest/raw/main/css/code_black.css"/>
    <!-- 引入表格样式 -->
    <link rel="stylesheet" href="https://gitee.com/actor20170211030627/HtmlTest/raw/main/css/table_style.css" />

    <!-- 给 table 第1列自动排序号, <table class="num_auto_increase" -->
<!--    <script type="text/javascript" src="https://gitee.com/actor20170211030627/HtmlTest/raw/main/js/table_num_auto_increase.js"></script>-->
</head>
<body>
    <h2>1.android:screenOrientation=""-说明</h2>
    <table class="num_auto_increase">
        <tr>
            <th>№</th>
            <th>值</th>
            <th>说明</th>
        </tr>
        <tr>
            <td>1</td>
            <td>unspecified</td>
            <td>默认值。由系统选择方向。在不同设备上，系统使用的政策以及基于政策在特定上下文中所做的选择可能会有所差异。</td>
        </tr>
        <tr>
            <td>2</td>
            <td>landscape</td>
            <td>(常用) 横向</td>
        </tr>
        <tr>
            <td>3</td>
            <td>portrait</td>
            <td>(常用) 纵向</td>
        </tr>
        <tr>
            <td>4</td>
            <td>sensor</td>
            <td>(常用) 由设备方向传感器决定. 但在默认情况下，一些设备不会旋转为所有四种可能的方向。如要支持所有这四种方向，请使用 "fullSensor"。即使用户锁定基于传感器的旋转，系统仍可使用传感器。</td>
        </tr>
        <tr>
            <td>5</td>
            <td>behind</td>
            <td>与 Activity 栈中紧接其后的 Activity 的方向相同。</td>
        </tr>
        <tr>
            <td>6</td>
            <td>fullSensor</td>
            <td>(常用) 屏幕方向由使用 4 种方向中任一方向的设备方向传感器决定。这与 "sensor" 类似，不同之处在于无论设备在正常情况下使用哪种方向，该值均支持所有 4 种可能的屏幕方向（例如，一些设备正常情况下不使用反向纵向或反向横向，但其支持这些方向）。API9 新增。</td>
        </tr>
        <tr>
            <td>7</td>
            <td>fullUser</td>
            <td>如果用户锁定基于传感器的旋转，则其行为与 user 相同，否则，其行为与 fullSensor 相同，并且支持所有 4 种可能的屏幕方向。API18 新增。</td>
        </tr>
        <tr>
            <td>8</td>
            <td>locked</td>
            <td>将屏幕方向锁定为其当前的任意旋转方向。API18 新增。</td>
        </tr>
        <tr>
            <td>9</td>
            <td>nosensor</td>
            <td>确定屏幕方向时不考虑物理方向传感器。系统会忽略传感器，因此显示内容不会随用户手持设备的方向而旋转。</td>
        </tr>
        <tr>
            <td>10</td>
            <td>reverseLandscape</td>
            <td>屏幕方向是与正常横向方向相反的横向。API9 新增。</td>
        </tr>
        <tr>
            <td>11</td>
            <td>reversePortrait</td>
            <td>屏幕方向是与正常纵向方向相反的纵向。API9 新增。</td>
        </tr>
        <tr>
            <td>12</td>
            <td>sensorLandscape</td>
            <td>屏幕方向为横向，但可根据设备传感器调整为正常或反向的横向。即使用户锁定基于传感器的旋转，系统仍可使用传感器。API9 新增。</td>
        </tr>
        <tr>
            <td>13</td>
            <td>sensorPortrait</td>
            <td>屏幕方向为纵向，但可根据设备传感器调整为正常或反向的纵向。即使用户锁定基于传感器的旋转，系统仍可使用传感器。API9 新增。</td>
        </tr>
        <tr>
            <td>14</td>
            <td>user</td>
            <td>用户当前的首选方向。</td>
        </tr>
        <tr>
            <td>15</td>
            <td>userLandscape</td>
            <td>屏幕方向为横向，但可根据设备传感器和用户首选项调整为正常或反向的横向。API18 新增。</td>
        </tr>
        <tr>
            <td>16</td>
            <td>userPortrait</td>
            <td>屏幕方向为纵向，但可根据设备传感器和用户首选项调整为正常或反向的纵向。API18 新增。</td>
        </tr>
    </table>



    <br />
    <h2>2.android:configChanges="" (可多个值, |分割)</h2>
    <font color="#cc99">&emsp;&emsp;列出 activity 将自行处理的配置变更。<br />
        在运行时发生配置变更时，默认情况下会关闭 activity 并将其重启，但使用该属性声明配置将阻止 activity 重启。<br />
        相反，activity 会保持运行状态，并且系统会调用其 onConfigurationChanged() 方法。
    </font>
    <table class="num_auto_increase">
        <tr>
            <th>№</th>
            <th>值</th>
            <th>说明</th>
        </tr>
        <tr>
            <td>1</td>
            <td>density</td>
            <td>显示密度的更改，例如当用户指定不同的显示比例或其他屏幕当前处于活跃状态时。 在 API 级别 24 中引入。</td>
        </tr>
        <tr>
            <td>2</td>
            <td>fontScale</td>
            <td>字体缩放比例的更改，例如当用户选择新的全局字体大小时。</td>
        </tr>
        <tr>
            <td>3</td>
            <td>keyboard</td>
            <td>键盘类型变化，如外接硬件键盘的插拔。</td>
        </tr>
        <tr>
            <td>4</td>
            <td>keyboardHidden</td>
            <td>(常用) 软键盘的显示或隐藏状态变化。</td>
        </tr>
        <tr>
            <td>5</td>
            <td>layoutDirection</td>
            <td>布局方向的更改，例如从由左到右 (LTR) 改为由右到左 (RTL)。 在 API 级别 17 中引入。</td>
        </tr>
        <tr>
            <td>6</td>
            <td>locale</td>
            <td>语言区域的更改，例如当用户选择显示文本所用的新语言时。</td>
        </tr>
        <tr>
            <td>7</td>
            <td>mcc</td>
            <td>移动国家代码（MCC）的变化，通常与SIM卡的变化相关。</td>
        </tr>
        <tr>
            <td>8</td>
            <td>mnc</td>
            <td>移动网络代码（MNC）的变化，表示手机用户的服务商变化。</td>
        </tr>
        <tr>
            <td>9</td>
            <td>navigation</td>
            <td>导航类型的变化，如轨迹球变为方向键。通常不会出现这种情况。</td>
        </tr>
        <tr>
            <td>10</td>
            <td>orientation</td>
            <td>(常用) 屏幕方向的更改，例如用户旋转设备时。</td>
        </tr>
        <tr>
            <td>11</td>
            <td>screenLayout</td>
            <td>屏幕布局的变化，可能与方向变化或屏幕尺寸变化同时发生。</td>
        </tr>
        <tr>
            <td>12</td>
            <td>screenSize</td>
            <td>(常用) 当前可用屏幕尺寸的更改。当用户在横向模式与纵向模式之间切换时，它便会发生变更。在 API 级别 13 中引入。</td>
        </tr>
        <tr>
            <td>13</td>
            <td>smallestScreenSize</td>
            <td>实体屏幕尺寸的变化，不依赖于方向。在 API 级别 13 中引入。</td>
        </tr>
        <tr>
            <td>14</td>
            <td>touchscreen</td>
            <td>触摸屏的更改。通常不会出现这种情况。</td>
        </tr>
        <tr>
            <td>15</td>
            <td>uiMode</td>
            <td>界面模式的变化，如夜间模式或车载模式的启用。如需了解有关不同界面模式的更多信息，请参阅UiModeManager。 在 API 级别 8 中引入。</td>
        </tr>
        <tr>
            <td>16</td>
            <td>colorMode</td>
            <td>
                当设备的色彩模式发生变化时（例如，用户从自然色模式切换到效果增强模式），App就可以调整UI元素的颜色以适应新的色彩模式。<br />
                常见的色彩模式值包括：<br />
                COLOR_MODE_NATURAL‌：自然色模式，使用设备默认的色彩设置。<br />
                COLOR_MODE_BOOSTED‌：效果增强模式，通常会提高颜色的饱和度和对比度。<br />
                COLOR_MODE_SATURATED‌：鲜艳模式，进一步增加颜色的饱和度。<br />
                COLOR_MODE_AUTOMATIC‌：自动调节模式，根据环境光线和其他因素自动调整色彩设置。
            </td>
        </tr>
        <tr>
            <td>17</td>
            <td>fontWeightAdjustment</td>
            <td>允许Activity在字体字重发生变化时自行处理，而不是让系统重新启动Activity。</td>
        </tr>
    </table>



    <br />
    <h2>3.android:configChanges 配置测试</h2>
<table class="num_auto_increase">
    <tr>
        <th>№</th>
        <th>AndroidManifest.xml<br />中配置</th>
        <th>旋转前</th>
        <th>旋转后</th>
        <th>Home键</th>
        <th>重进App</th>
    </tr>
    <tr>
        <td>1</td>
        <td>无</td>
        <td>
            <ol>
                <li>attachBaseContext(Context)</li>
                <li>onCreate(Bundle), Bundle = null</li>
                <li>onStart()</li>
                <li>onResume()</li>
                <li>onAttachedToWindow()</li>
            </ol>
        </td>
        <td>
            <ol>
                <li>onPause()</li>
                <li>onStop()</li>
                <li>onSaveInstanceState(Bundle), Bundle != null</li>
                <li>onDestroy()</li>
                <li>onDetachedFromWindow() <br /></li>
                <li>&#009;↓</li>
                <li>attachBaseContext(Context)</li>
                <li>onCreate(Bundle), Bundle != null</li>
                <li>onStart()</li>
                <li>onRestoreInstanceState(Bundle), Bundle != null</li>
                <li>onResume()</li>
                <li>onAttachedToWindow()</li>
            </ol>
        </td>
        <td>
            <ol>
                <li>onPause()</li>
                <li>onStop()</li>
                <li>onSaveInstanceState(Bundle), Bundle != null</li>
            </ol>
        </td>
        <td>
            <ol>
                <li>onRestart()</li>
                <li>onStart()</li>
                <li>onResume()</li>
            </ol>
        </td>
    </tr>

    <tr>
        <td>2</td>
        <td>keyboardHidden|orientation|screenSize</td>
        <td>同上↑</td>
        <td>onConfigurationChanged(Configuration)</td>
        <td>同上↑</td>
        <td>
            onConfigurationChanged(Configuration)(if屏幕发生了偏转)<br />
            然后同上↑
        </td>
    </tr>
</table>



    <br />
    <h2>4.代码设置方向问题</h2>
    <ol>
        <li>不配置android:configChanges</li>
        <li>打开手机手机横屏自动旋转</li>
        <li>结果:</li>
    </ol>
    <table class="num_auto_increase">
        <tr>
            <th>№</th>
            <th>Activity的onCreate()中</th>
            <th>生命周期</th>
        </tr>
        <tr>
            <td>1</td>
            <td>
                protected void onCreate(Bundle savedInstanceState) { <br />
                &emsp;super.onCreate(savedInstanceState); <br />
                &emsp;setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); <br />
                &emsp;setContentView(R.layout.xxx); <br />
                }
            </td>
            <td>
                attachBaseContext() <br />
                setRequestedOrientation(int requestedOrientation) <br />
                onCreate() <br />
                onStart() <br />
                onResume() <br />
                onAttachedToWindow() <br />
                &emsp; ↓ <br />
                <s>onConfigurationChanged(Configuration) Vivo X27实测, 有时有, 有时冇, 不知道啥毛病</s> <br />
                onPause() <br />
                onStop() <br />
                onSaveInstanceState() <br />
                onDestroy() <br />
                onDetachedFromWindow() <br />
                attachBaseContext() <br />
                setRequestedOrientation(int requestedOrientation) <br />
                onCreate() <br />
                onStart() <br />
                onRestoreInstanceState(Bundle) <br />
                onResume() <br />
                onAttachedToWindow() <br />
            </td>
        </tr>
        <tr>
            <td>2</td>
            <td>
                protected void onCreate(Bundle savedInstanceState) { <br />
                &emsp;super.onCreate(savedInstanceState); <br />
                &emsp;setContentView(R.layout.xxx); <br />
                &emsp;setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); <br />
                }
            </td>
            <td>同上↑</td>
        </tr>
    </table>
</body>
</html>